Flutter-এ File I/O (Input/Output) এবং JSON ডেটা ম্যানিপুলেশন অ্যাপ্লিকেশনের ডেটা সংরক্ষণ, ফাইল থেকে ডেটা পড়া এবং JSON ডেটা প্রসেস করার জন্য ব্যবহৃত হয়। এটি অ্যাপ্লিকেশনকে আরও কার্যকরী করে এবং অফলাইন ডেটা স্টোরেজের ক্ষেত্রে বিশেষভাবে সহায়ক। এখানে Flutter-এ File I/O এবং JSON ডেটা ম্যানিপুলেশন নিয়ে বিস্তারিত আলোচনা করা হলো:
১. File I/O (Input/Output) ব্যবহারের ধাপ
Flutter-এ dart
লাইব্রেরি ব্যবহার করে আপনি ফাইল পড়া, লেখা, এবং ম্যানিপুলেট করতে পারেন। path_provider প্যাকেজের সাহায্যে আপনি ডিভাইসের লোকাল ডিরেক্টরির (যেমন অ্যাপ্লিকেশনের ডকুমেন্ট বা ক্যাশ ডিরেক্টরি) পাথ পেতে পারেন।
ধাপ ১: path_provider প্যাকেজ ইন্সটল করা
প্রথমে pubspec.yaml ফাইলে path_provider প্যাকেজ যোগ করুন:
dependencies:
flutter:
sdk: flutter
path_provider: ^2.0.11
এরপর flutter pub get কমান্ড চালিয়ে প্যাকেজটি ইন্সটল করুন।
ধাপ ২: ফাইল লেখা এবং পড়া
import 'package:flutter/material.dart';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FileExampleScreen(),
);
}
}
class FileExampleScreen extends StatefulWidget {
@override
_FileExampleScreenState createState() => _FileExampleScreenState();
}
class _FileExampleScreenState extends State<FileExampleScreen> {
String _fileContent = 'No Data';
// ফাইলের পথ পাওয়া
Future<File> _getLocalFile() async {
final directory = await getApplicationDocumentsDirectory();
return File('${directory.path}/data.txt');
}
// ফাইল থেকে ডেটা রিড করা
Future<void> _readFromFile() async {
try {
final file = await _getLocalFile();
String contents = await file.readAsString();
setState(() {
_fileContent = contents;
});
} catch (e) {
setState(() {
_fileContent = 'Error reading file';
});
}
}
// ফাইলে ডেটা লেখা
Future<void> _writeToFile(String content) async {
final file = await _getLocalFile();
await file.writeAsString(content);
_readFromFile();
}
@override
void initState() {
super.initState();
_readFromFile(); // অ্যাপ চালু হলে ফাইল থেকে ডেটা লোড করা হচ্ছে
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('File I/O Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
_fileContent,
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
_writeToFile('Hello, Flutter!');
},
child: Text('Write to File'),
),
],
),
),
);
}
}
কোডের ব্যাখ্যা
- getApplicationDocumentsDirectory(): path_provider প্যাকেজ থেকে এই ফাংশনটি ব্যবহার করে অ্যাপ্লিকেশনের ডকুমেন্ট ডিরেক্টরির পাথ পাওয়া হয়।
- File.writeAsString(): ফাইলে স্ট্রিং ডেটা লিখতে ব্যবহৃত হয়।
- File.readAsString(): ফাইল থেকে ডেটা স্ট্রিং আকারে পড়তে ব্যবহৃত হয়।
- setState: ফাইলের ডেটা পড়ে UI আপডেট করা হয়।
২. JSON ডেটা ম্যানিপুলেশন
JSON ডেটা অনেক API এবং ডাটাবেস রেসপন্সে ব্যবহৃত হয়। Flutter-এ dart
প্যাকেজ ব্যবহার করে JSON ডেটা পার্স এবং ম্যানিপুলেট করা যায়।
JSON ডেটা পার্স করা
dart
প্যাকেজের json.decode() ব্যবহার করে JSON স্ট্রিং থেকে Dart অবজেক্টে কনভার্ট করা হয়।
import 'dart:convert';
void main() {
String jsonString = '''
{
"name": "John Doe",
"age": 25,
"email": "john.doe@example.com"
}
''';
// JSON থেকে Dart Map এ কনভার্ট করা
Map<String, dynamic> user = json.decode(jsonString);
print('Name: ${user['name']}');
print('Age: ${user['age']}');
print('Email: ${user['email']}');
}
JSON ডেটা থেকে Dart ক্লাসে কনভার্ট করা
প্রায়শই API থেকে আসা JSON ডেটাকে Dart ক্লাসে কনভার্ট করা হয়, যাতে ডেটা ম্যানিপুলেট করা এবং UI তে উপস্থাপন করা সহজ হয়।
উদাহরণ: JSON ডেটা থেকে Dart ক্লাসে কনভার্ট করা
import 'dart:convert';
class User {
final String name;
final int age;
final String email;
User({required this.name, required this.age, required this.email});
// JSON থেকে Dart অবজেক্ট তৈরি করার ফ্যাক্টরি কন্সট্রাক্টর
factory User.fromJson(Map<String, dynamic> json) {
return User(
name: json['name'],
age: json['age'],
email: json['email'],
);
}
// Dart অবজেক্ট থেকে JSON তৈরি করার মেথড
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
'email': email,
};
}
}
void main() {
String jsonString = '''
{
"name": "John Doe",
"age": 25,
"email": "john.doe@example.com"
}
''';
// JSON থেকে User অবজেক্ট তৈরি করা
Map<String, dynamic> userMap = json.decode(jsonString);
User user = User.fromJson(userMap);
print('Name: ${user.name}');
print('Age: ${user.age}');
print('Email: ${user.email}');
// User অবজেক্ট থেকে JSON তৈরি করা
String encodedJson = json.encode(user.toJson());
print('Encoded JSON: $encodedJson');
}
কোডের ব্যাখ্যা
- User.fromJson(): JSON ডেটা থেকে Dart অবজেক্ট তৈরি করার জন্য একটি ফ্যাক্টরি কন্সট্রাক্টর।
- toJson(): Dart অবজেক্ট থেকে JSON ডেটা তৈরি করার জন্য একটি মেথড।
- json.decode(): JSON স্ট্রিংকে Map<String, dynamic> এ কনভার্ট করা হয়।
- json.encode(): Dart অবজেক্টকে JSON স্ট্রিংয়ে কনভার্ট করা হয়।
৩. JSON ডেটা ফাইল I/O এর সাথে সংযুক্ত করা
Flutter-এ JSON ডেটা ফাইল থেকে পড়া এবং লেখা সম্ভব। নিচে ফাইল I/O এবং JSON ম্যানিপুলেশন একত্রে ব্যবহারের উদাহরণ দেওয়া হলো:
import 'package:flutter/material.dart';
import 'dart:io';
import 'dart:convert';
import 'package:path_provider/path_provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: JsonFileExampleScreen(),
);
}
}
class JsonFileExampleScreen extends StatefulWidget {
@override
_JsonFileExampleScreenState createState() => _JsonFileExampleScreenState();
}
class _JsonFileExampleScreenState extends State<JsonFileExampleScreen> {
Map<String, dynamic>? _data;
Future<File> _getLocalFile() async {
final directory = await getApplicationDocumentsDirectory();
return File('${directory.path}/data.json');
}
Future<void> _readJsonFromFile() async {
try {
final file = await _getLocalFile();
String contents = await file.readAsString();
setState(() {
_data = json.decode(contents);
});
} catch (e) {
setState(() {
_data = {'message': 'Error reading file'};
});
}
}
Future<void> _writeJsonToFile(Map<String, dynamic> data) async {
final file = await _getLocalFile();
await file.writeAsString(json.encode(data));
_readJsonFromFile();
}
@override
void initState() {
super.initState();
_readJsonFromFile();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('JSON File I/O Example')),
body: Center(
child: _data == null
? CircularProgressIndicator()
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Name: ${_data!['name'] ?? 'N/A'}'),
Text('Age: ${_data!['age'] ?? 'N/A'}'),
ElevatedButton(
onPressed: () {
_writeJsonToFile({'name': 'John Doe', 'age': 30});
},
child: Text('Save JSON Data'),
),
],
),
),
);
}
}
সংক্ষেপে
- Flutter-এ File I/O করতে dartএবং path_provider প্যাকেজ ব্যবহার করা হয়।
- JSON ডেটা ম্যানিপুলেশন করতে dartপ্যাকেজ ব্যবহার করা হয়, যা JSON ডেটা পার্স এবং এনকোড করতে সাহায্য করে।
- ফাইল সিস্টেমে JSON ডেটা সংরক্ষণ এবং পড়া সম্ভব, যা অ্যাপ্লিকেশনের ডেটা ম্যানেজমেন্টকে আরও কার্যকরী করে।
এভাবে, Flutter-এ File I/O এবং JSON ডেটা ম্যানিপুলেশন ব্যবহার করে অ্যাপ্লিকেশনকে আরও ফ্লেক্সিবল এবং ডাইনামিক করা যায়।
Read more